home *** CD-ROM | disk | FTP | other *** search
- ;; vi-telex.mim -- Input method for Vietnames with TELEX key sequence
- ;; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
- ;; National Institute of Advanced Industrial Science and Technology (AIST)
- ;; Registration Number H15PRO112
-
- ;; This file is part of the m17n database; a sub-part of the m17n
- ;; library.
-
- ;; The m17n library is free software; you can redistribute it and/or
- ;; modify it under the terms of the GNU Lesser General Public License
- ;; as published by the Free Software Foundation; either version 2.1 of
- ;; the License, or (at your option) any later version.
-
- ;; The m17n library is distributed in the hope that it will be useful,
- ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
- ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- ;; Lesser General Public License for more details.
-
- ;; You should have received a copy of the GNU Lesser General Public
- ;; License along with the m17n library; if not, write to the Free
- ;; Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- ;; Boston, MA 02110-1301, USA.
-
- (input-method vi telex)
-
- (description (_"Vietnames input method using the TELEX key sequence.
- Typing Backslash ('\\') toggles the normal mode and English mode.
- The following variables are customizable:
- tone-mark-on-last: control tone mark position in equivocal cases
- backspace-is-undo: control the action of Backspace key (delete or undo)"))
-
- (title "Ắ(TLX)")
-
- (variable
- (tone-mark-on-last
- (_"Flag to control tone mark position in equivocal cases.
- If this variable is 0 (the default), put tone mark on the first vowel
- in such equivocal cases as \"oa\", \"oe\", \"uy\".
- Otherwise, put tone mark on the last vowel.")
- 0 0 1)
-
- (backspace-is-undo
- (_"Flag to control the action of Backspace key (delete or undo).
- If this variable is 0 (the default), Backspace key deletes the previous
- character (e.g. \"q u a i s BS\" => \"quá\").
- If the value is 1, Backspace key undoes the previous key
- \(e.g. \"q u a i s BS\" => \"quai\").")
- 0 0 1))
-
- (include (t nil vi-base) macro)
- (include (t nil vi-base) map)
-
- (map
- (vowel-ext
- ("aa" ("âấầẩẫậ")) ("AA" ("ÂẤẦẨẪẬ")) ("Aa" ("ÂẤẦẨẪẬ"))
- ("aw" ("ăắằẳẵặ")) ("AW" ("ĂẮẰẲẴẶ")) ("Aw" ("ĂẮẰẲẴẶ"))
- ("ee" ("êếềểễệ")) ("EE" ("ÊẾỀỂỄỆ")) ("Ee" ("ÊẾỀỂỄỆ"))
- ("oo" ("ôốồổỗộ")) ("OO" ("ÔỐỒỔỖỘ")) ("Oo" ("ÔỐỒỔỖỘ"))
- ("ow" ("ơớờởỡợ")) ("OW" ("ƠỚỜỞỠỢ")) ("Ow" ("ƠỚỜỞỠỢ"))
- ("uw" ("ưứừửữự")) ("UW" ("ƯỨỪỬỮỰ")) ("Uw" ("ƯỨỪỬỮỰ"))
- ("w" (cond ((= V-1 0) ("ưứừửữự")) (1 "w"))) ; Works when it's the
- ("W" (cond ((= V-1 0) ("ƯỨỪỬỮỰ")) (1 "W"))) ; first vowel (not seư)
- ("ooo" ("oóòỏõọ") ("oóòỏõọ") (set V-2 V-1) (set V-1 ?o))
- ("OOO" ("OÓÒỎÕỌ") ("OÓÒỎÕỌ") (set V-2 V-1) (set V-1 ?O))
- ("Ooo" ("OÓÒỎÕỌ") ("oóòỏõọ") (set V-2 V-1) (set V-1 ?O)))
-
- (consonant-ext
- ("dd" ?─æ) ("DD" ?─É) ("Dd" ?─É))
- ;("dd" (cond ((= C-AFTER-V 0) "dd") (1 ?─æ))) ; Works when
- ;("DD" (cond ((= C-AFTER-V 0) "DD") (1 ?─É))) ; it is the first
- ;("Dd" (cond ((= C-AFTER-V 0) "Dd") (1 ?─É)))) ; letter (not a─æ)
-
- (tone-mark
- ("z" (set SELECT 0) ?z) ("Z" (set SELECT 0) ?Z)
- ("s" (set SELECT 1) ?s) ("S" (set SELECT 1) ?S)
- ("f" (set SELECT 2) ?f) ("F" (set SELECT 2) ?F)
- ("r" (set SELECT 3) ?r) ("R" (set SELECT 3) ?R)
- ("x" (set SELECT 4) ?x) ("X" (set SELECT 4) ?X)
- ("j" (set SELECT 5) ?j) ("J" (set SELECT 5) ?J))
-
- (consonant-or-tone-mark
- ("z" ?z) ("s" ?s) ("f" ?f) ("r" ?r) ("x" ?x) ("j" ?j)
- ("Z" ?Z) ("S" ?S) ("F" ?F) ("R" ?R) ("X" ?X) ("J" ?J))
-
- (temporary-escape
- ("aaa" "aa") ("AAA" "AA") ("Aaa" "Aa")
- ("eee" "ee") ("EEE" "EE") ("Eee" "Ee")
- ("ddd" "dd") ("DDD" "DD") ("Ddd" "Dd")
- ("aww" "aw") ("AWW" "AW") ("Aww" "Aw")
- ("uww" "uw") ("UWW" "UW") ("Uww" "Uw")
- ("oww" "ow") ("OWW" "OW") ("Oww" "Ow")
- ("ww" ?w) ("WW" ?W) ("Ww" ?W)
- ("zz" ?z) ("ZZ" ?Z) ("Zz" ?Z)
- ("ss" ?s) ("SS" ?S) ("Ss" ?S)
- ("ff" ?f) ("FF" ?F) ("Ff" ?F)
- ("rr" ?r) ("RR" ?R) ("Rr" ?R)
- ("xx" ?x) ("XX" ?X) ("Xx" ?X)
- ("jj" ?j) ("JJ" ?J) ("Jj" ?J)))
-
- (state
- (init
- ;; Initialize variables. C is the initial consonant. V-N is the
- ;; (N-1)th vowel from the last. C-AFTER-V is a number of consonants
- ;; typed after vowel.
- (t (set C @-1) (set V-1 0) (set V-2 0) (set V-3 0) (set C-AFTER-V 0)
- (set SELECT 0))
-
- (consonant (set C @-1))
- (consonant-ext (set C @-1))
- (consonant-or-tone-mark
- (cond ((| (= @-1 ?f) (= @-1 ?j) (= @-1 ?z) ; Invalid beginning consonants
- (= @-1 ?F) (= @-1 ?J) (= @-1 ?Z)) (shift temporary-escape))
- (1 (set C @-1))))
-
- ;; Mark M remembers the preedit position after the last vowel.
- (vowel (mark M) (set V-2 V-1) (set V-1 @-1) (shift after-v))
- (vowel-ext (mark M) (set V-2 V-1) (set V-1 @-1) (shift after-v))
- (temporary-escape (shift temporary-escape))
- (permanent-escape (shift escape-in-normal-mode)))
-
- ;; The state shifted to when a vowel is typed.
- (after-v
- (ending-1st-consonant (handle-mark) (shift after-vc)) ; toans/toasn->toán
- (vowel (mark M) (set V-3 V-2) (set V-2 V-1) (set V-1 @-1)
- (move T) (select 0) (handle-mark) (move M))
- (vowel-ext (mark M) (set V-3 V-2) (set V-2 V-1) (set V-1 @-1)
- (move T) (select 0) (handle-mark) (move M))
- (ending-1st-notviet-consonant (shift temporary-escape)) ;; See ending-1st-notviet-consonant section in the vi-base.mim
- (consonant-or-tone-mark (delete @-) (pushback 1) (shift after-t))
- (backspace (delete @-)
- (cond (V-3 (set V-1 V-2) (set V-2 V-3) (set V-3 0)
- (cond ((> TPLACE 2) (set SELECT 0)))
- (handle-mark))
- (V-2 (set V-1 V-2) (set V-2 0)
- (cond ((> TPLACE 1) (set SELECT 0)))
- (handle-mark))
- (1 (shift init)))))
-
- ;; The state shifted to when a consonant is typed after a vowel.
- (after-vc
- (t (set C-AFTER-V 1))
- (ending-2nd-consonant
- (cond ((| (= @-2 ?n) (= @-2 ?c) ; 1st ending consonant must be n/c
- (= @-2 ?N) (= @-2 ?C)) (add C-AFTER-V 1))
- (1 (shift temporary-escape))))
- (ending-1st-notviet-consonant (shift temporary-escape)) ;; Expand notviet-consonant section in the vi-base.mim
- (consonant-or-tone-mark (delete @-) (pushback 1) (shift after-t))
- (vowel (shift temporary-escape)) ; There can only be one
- (vowel-ext (shift temporary-escape)) ; main vowel in a word
- (backspace (delete @-)
- (sub C-AFTER-V 1)
- (handle-mark)
- (cond ((= C-AFTER-V 0) (shift after-v)))))
-
- ;; The state shifted to when a tone-mark is typed.
- (after-t
- (t (set CURRENT-SELECT -1))
- (tone-mark (cond ((= CURRENT-SELECT SELECT) (move T) (select 0) (move @>)
- (shift temporary-escape))
- (1 (delete @-) (handle-mark) (set CURRENT-SELECT SELECT))))
- (nil (cond (C-AFTER-V (shift after-vc))
- (1 (shift after-v)))))
-
- (temporary-escape
- "en"
- (t (commit))
- (alnum (commit)))
-
- (escape-in-normal-mode
- "EN"
- (permanent-escape (insert "\\") (shift init))
- ;; Any other key force shifting to permanent-escape.
- (nil (shift permanent-escape)))
-
- (permanent-escape
- "EN"
- (t (set ESCAPE 1))
- (permanent-escape (shift escape-in-permanent-escape))
- ;; Unhandle any characters.
- (nil (unhandle)))
-
- (escape-in-permanent-escape
- "Ắ"
- (permanent-escape (insert "\\") (commit) (shift permanent-escape))
- ;; Any other key force shifting to init
- ))
-
- ;; Local Variables:
- ;; coding: utf-8
- ;; mode: emacs-lisp
- ;; End:
-